home *** CD-ROM | disk | FTP | other *** search
/ Dr. Windows 3 / dr win3.zip / dr win3 / PROGRAMR / OLE2BOOK.ZIP / CHAP05.ZIP / CHAP05 / POLYLINE / POLYLINE.H < prev    next >
C/C++ Source or Header  |  1993-04-13  |  6KB  |  215 lines

  1. /*
  2.  * POLYLINE.H
  3.  * Modifications for Chapter 5.
  4.  *
  5.  * Definitions and function prototypes for the PolyLine DLL object.
  6.  *
  7.  * Copyright (c)1993 Microsoft Corporation, All Rights Reserved
  8.  *
  9.  * Kraig Brockschmidt, Software Design Engineer
  10.  * Microsoft Systems Developer Relations
  11.  *
  12.  * Internet  :  kraigb@microsoft.com
  13.  * Compuserve:  >INTERNET:kraigb@microsoft.com
  14.  */
  15.  
  16.  
  17. #ifndef _POLYLINE_H_
  18. #define _POLYLINE_H_
  19.  
  20. #include <windows.h>
  21. #include <ole2.h>
  22. #include <classlib.h>
  23. #include <bookguid.h>
  24. #include <ipoly5.h>
  25. #include "resource.h"
  26.  
  27.  
  28. //Classname
  29. #define SZCLASSPOLYLINE             "polyline"
  30.  
  31. #define HIMETRIC_PER_INCH           2540
  32.  
  33. //Window extra bytes and offsets
  34. #define CBPOLYLINEWNDEXTRA          (sizeof(LONG))
  35. #define PLWL_STRUCTURE              0
  36.  
  37.  
  38. //DLLPOLY.CPP
  39.  
  40. //This class factory object creates Polyline objects.
  41.  
  42. class __far CPolylineClassFactory : public IClassFactory
  43.     {
  44.     protected:
  45.         ULONG           m_cRef;         //Reference count on object
  46.  
  47.     public:
  48.         CPolylineClassFactory(void);
  49.         ~CPolylineClassFactory(void);
  50.  
  51.         //IUnknown members
  52.         STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *);
  53.         STDMETHODIMP_(ULONG) AddRef(void);
  54.         STDMETHODIMP_(ULONG) Release(void);
  55.  
  56.         //IClassFactory members
  57.         STDMETHODIMP         CreateInstance(LPUNKNOWN, REFIID, LPVOID FAR *);
  58.         STDMETHODIMP         LockServer(BOOL);
  59.     };
  60.  
  61. typedef CPolylineClassFactory FAR * LPCPolylineClassFactory;
  62.  
  63.  
  64.  
  65. //POLYWIN.CPP
  66. LRESULT __export FAR PASCAL PolylineWndProc(HWND, UINT, WPARAM, LPARAM);
  67.  
  68.  
  69. //Type for an object-destroyed callback
  70. typedef void (FAR PASCAL *LPFNDESTROYED)(void);
  71.  
  72.  
  73. //POLYLINE.CPP
  74. class __far CPolyline : public IUnknown
  75.     {
  76.     friend LRESULT __export FAR PASCAL PolylineWndProc(HWND, UINT, WPARAM, LPARAM);
  77.  
  78.     //Make any contained interfaces your friends so they can get at privates
  79.     friend class CImpIPolyline;
  80.     friend class CImpIPersistStorage;
  81.  
  82.     protected:
  83.         HWND            m_hWnd;
  84.         HINSTANCE       m_hInst;
  85.  
  86.         ULONG           m_cRef;         //Object reference count.
  87.         LPUNKNOWN       m_punkOuter;    //Controlling Unknown for aggregation
  88.         LPFNDESTROYED   m_pfnDestroy;   //Function to call on closure.
  89.         BOOL            m_fDirty;       //Have we changed?
  90.         POLYLINEDATA    m_pl;           //Our actual data.
  91.  
  92.         //CHAPTER5MOD
  93.         LPCStringTable  m_pST;          //Object strings
  94.         UINT            m_cf;           //Object clipboard format.
  95.         CLSID           m_clsID;        //Current CLSID
  96.         IID             m_iID;          //Custom interface IID.
  97.  
  98.         //Contained interfaces
  99.         LPPOLYLINE          m_pIPolyline;
  100.         LPPERSISTSTORAGE    m_pIPersistStorage;
  101.         //End CHAPTER5MOD
  102.  
  103.         LPPOLYLINEADVISESINK    m_pAdv;
  104.  
  105.     protected:
  106.         void      PointScale(LPRECT, LPPOINT, BOOL);
  107.         void      Draw(HDC, BOOL, BOOL);
  108.         void      RectConvertMappings(LPRECT, BOOL);
  109.  
  110.     public:
  111.         CPolyline(LPUNKNOWN, LPFNDESTROYED, HINSTANCE);
  112.         ~CPolyline(void);
  113.  
  114.         BOOL      FInit(void);
  115.  
  116.         //Non-delegating object IUnknown
  117.         STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *);
  118.         STDMETHODIMP_(ULONG) AddRef(void);
  119.         STDMETHODIMP_(ULONG) Release(void);
  120.     };
  121.  
  122. typedef CPolyline FAR * LPCPolyline;
  123.  
  124.  
  125. //Interface implementation contained in the Polyline.
  126.  
  127. class __far CImpIPolyline : public IPolyline5
  128.     {
  129.     protected:
  130.         ULONG               m_cRef;      //Interface reference count.
  131.         LPVOID              m_pObj;      //Back pointer to the object.
  132.         LPUNKNOWN           m_punkOuter; //Controlling unknown for delegation.
  133.  
  134.     public:
  135.         CImpIPolyline(LPVOID, LPUNKNOWN);
  136.         ~CImpIPolyline(void);
  137.  
  138.         //IUnknown members.
  139.         STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *);
  140.         STDMETHODIMP_(ULONG) AddRef(void);
  141.         STDMETHODIMP_(ULONG) Release(void);
  142.  
  143.         //CHAPTER5MOD
  144.         //::ReadFromFile and ::WriteToFile replaced with IPersistStorage.
  145.         //End CHAPTER5MOD
  146.  
  147.         //Data transfer members:
  148.         STDMETHODIMP DataSet(LPPOLYLINEDATA, BOOL, BOOL);
  149.         STDMETHODIMP DataGet(LPPOLYLINEDATA);
  150.         STDMETHODIMP DataSetMem(HGLOBAL, BOOL, BOOL, BOOL);
  151.         STDMETHODIMP DataGetMem(HGLOBAL FAR *);
  152.  
  153.         STDMETHODIMP RenderBitmap(HBITMAP FAR *);
  154.         STDMETHODIMP RenderMetafile(HMETAFILE FAR *);
  155.         STDMETHODIMP RenderMetafilePict(HGLOBAL FAR *);
  156.  
  157.         //Manipulation members:
  158.         STDMETHODIMP Init(HWND, LPRECT, DWORD, UINT);
  159.         STDMETHODIMP New(void);
  160.         STDMETHODIMP Undo(void);
  161.         STDMETHODIMP Window(HWND FAR *);
  162.  
  163.         STDMETHODIMP SetAdvise(LPPOLYLINEADVISESINK);
  164.         STDMETHODIMP GetAdvise(LPPOLYLINEADVISESINK FAR *);
  165.  
  166.         STDMETHODIMP RectGet(LPRECT);
  167.         STDMETHODIMP SizeGet(LPRECT);
  168.         STDMETHODIMP RectSet(LPRECT, BOOL);
  169.         STDMETHODIMP SizeSet(LPRECT, BOOL);
  170.  
  171.         STDMETHODIMP ColorSet(UINT, COLORREF, COLORREF FAR *);
  172.         STDMETHODIMP ColorGet(UINT, COLORREF FAR *);
  173.  
  174.         STDMETHODIMP LineStyleSet(UINT, UINT FAR *);
  175.         STDMETHODIMP LineStyleGet(UINT FAR *);
  176.     };
  177.  
  178. typedef CImpIPolyline * LPCImpIPolyline;
  179.  
  180.  
  181. //CHAPTER5MOD
  182.  
  183. //Interface implementation contained in the Polyline.
  184.  
  185. class __far CImpIPersistStorage : public IPersistStorage
  186.     {
  187.     protected:
  188.         ULONG               m_cRef;      //Interface reference count.
  189.         LPVOID              m_pObj;      //Back pointer to the object.
  190.         LPUNKNOWN           m_punkOuter; //Controlling unknown for delegation.
  191.  
  192.     public:
  193.         CImpIPersistStorage(LPVOID, LPUNKNOWN);
  194.         ~CImpIPersistStorage(void);
  195.  
  196.         STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *);
  197.         STDMETHODIMP_(ULONG) AddRef(void);
  198.         STDMETHODIMP_(ULONG) Release(void);
  199.  
  200.         STDMETHODIMP GetClassID(LPCLSID);
  201.  
  202.         STDMETHODIMP IsDirty(void);
  203.         STDMETHODIMP InitNew(LPSTORAGE);
  204.         STDMETHODIMP Load(LPSTORAGE);
  205.         STDMETHODIMP Save(LPSTORAGE, BOOL);
  206.         STDMETHODIMP SaveCompleted(LPSTORAGE);
  207.         STDMETHODIMP HandsOffStorage(void);
  208.     };
  209.  
  210. typedef CImpIPersistStorage * LPCImpIPersistStorage;
  211.  
  212. //End CHAPTER5MOD
  213.  
  214. #endif  //_POLYLINE_H_
  215.